Skip to content

Clean up dataset audit (#365) + discontinued backlog (#362)#530

Merged
jeffreylouden merged 2 commits into
mainfrom
cleanup/dataset-audit-529
Jul 12, 2026
Merged

Clean up dataset audit (#365) + discontinued backlog (#362)#530
jeffreylouden merged 2 commits into
mainfrom
cleanup/dataset-audit-529

Conversation

@jeffreylouden

@jeffreylouden jeffreylouden commented Jul 12, 2026

Copy link
Copy Markdown
Member

Resolves the actionable findings from the monthly Dataset Audit (#365) and Discontinued Tagging Backlog (#362).

Fixes #365
Fixes #362

#365 — Duplicate-name groups (28 → 1)

True duplicates merged (kept the richer entry on the canonical manufacturer-slug filename, pulled formats/categories from the thin twin, deleted the redundant file — no inbound supersedes references were affected):

  • 10× uJAM Beatmaker instruments: ujam-beatmaker-*ujam-instruments-beatmaker-*
  • WA Production Babylon 2 and BassShaper: w-a-production-*wa-production-*
  • Airwindows Average — two blog-post imports of the same plugin
  • DW Satin Black over Brass snare and 4-Piece Performance Series kit — duplicate SKU codes

Cosmetic variants folded: the three Taylor T5z Pro colorways (Cayenne Red / Harbor Blue / Tobacco Sunburst) → one entry with a variants array.

Root-cause fix: the audit's normalizeName stripped +, so every ProFX10v3 / ProFX10v3+-style pair false-collided. It now treats a trailing + as a significant plus token, clearing ~12 false-positive groups (dbx DriveRack PA/PA+, Denon Prime 4/4+ & GO/GO+, Mackie ProFX6/10/12 v3/v3+, Big Knob Studio/Studio+, CR-Buds/CR-Buds+, EM-91CU/EM-91CU+, Numark Mixstream Pro/Pro+, Elektron Machinedrum SPS-1UW MKII/1UW+ MKII). These were already correctly modeled as distinct entries (most linked via supersedes). Also renamed fostex-t50rpmk4g-2fostex-t50rpmk4g-plus to match its actual name (T50RPmk4g+).

Remaining (intentional): 1 group — Bastl CIAO / CIAO!! — is a genuine distinct pair (CIAO is discontinued, CIAO!! supersedes it); the !! gets stripped by the normalizer. Left as-is since the data is already correct.

Broken compatibleWith: 0 (the one in the report was already fixed on main).

#362 — Discontinued backlog

  • Tier 1 (14): auto-tagged via pnpm discontinued:apply — superseded entries missing the discontinued category.
  • Tier 2 (34): reviewed each entry's discontinuation language and tagged the genuine ones — 13 Audeze legacy headphones, 14 dbx Professional Audio units, Krotos/Synchro Arts software (explicit verification.status), Numark Axis 4, Chase Bliss Wombtone, Fostex PM0.4c, Jomox XBase 999.
  • Excluded 1 false positive: dubreq-ltd-stylophone-s2 — its "discontinued in 1975" refers to the original Stylophone; the S2 is a current product.

Validation

pnpm validate passes (exit 0); the post-change dataset audit and discontinued report are clean apart from the two documented intentional residuals.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Data Improvements

    • Improved catalog accuracy by consolidating duplicate entries and unifying Taylor T5z Pro colorways into a single listing.
    • Added the Fostex T50RPmk4g+ product listing and refreshed multiple software listings with updated descriptions, specs, pricing, links, and videos.
    • Refined naming so “+” variants are handled as distinct, preventing accidental grouping.
  • Bug Fixes

    • Added clear “discontinued” labels across multiple hardware, software, and content entries.
    • Removed obsolete or duplicate catalog entries and cleaned up ambiguous discontinued items.

Merge true-duplicate entries, fold Taylor T5z Pro colorways into variants,
fix the audit name-normalizer so distinct +/plus SKUs stop false-colliding,
and tag 48 confirmed-discontinued entries (14 Tier-1 auto + 34 reviewed Tier-2).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@changeset-bot

changeset-bot Bot commented Jul 12, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: c2b80ae

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
catalog Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions github-actions Bot added software Changes to software catalog entries scripts Changes to build/validation scripts hardware Changes to hardware catalog entries content labels Jul 12, 2026
@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 9d2f9b54-3a07-4d5d-b1ab-1a95cbadf487

📥 Commits

Reviewing files that changed from the base of the PR and between 792f4af and c2b80ae.

📒 Files selected for processing (13)
  • data/hardware/jomox-xbase-999.yaml
  • data/hardware/taylor-t5z-pro.yaml
  • data/software/ujam-instruments-beatmaker-circuits.yaml
  • data/software/ujam-instruments-beatmaker-cozy.yaml
  • data/software/ujam-instruments-beatmaker-glory.yaml
  • data/software/ujam-instruments-beatmaker-hype.yaml
  • data/software/ujam-instruments-beatmaker-idol.yaml
  • data/software/ujam-instruments-beatmaker-kandy.yaml
  • data/software/ujam-instruments-beatmaker-nemesis.yaml
  • data/software/ujam-instruments-beatmaker-vice.yaml
  • data/software/wa-production-bassshaper.yaml
  • scripts/__tests__/dataset-audit.test.ts
  • scripts/dataset-audit.ts
✅ Files skipped from review due to trivial changes (1)
  • data/hardware/jomox-xbase-999.yaml
🚧 Files skipped from review as they are similar to previous changes (10)
  • data/software/ujam-instruments-beatmaker-glory.yaml
  • data/software/wa-production-bassshaper.yaml
  • data/software/ujam-instruments-beatmaker-kandy.yaml
  • data/hardware/taylor-t5z-pro.yaml
  • data/software/ujam-instruments-beatmaker-vice.yaml
  • data/software/ujam-instruments-beatmaker-circuits.yaml
  • data/software/ujam-instruments-beatmaker-hype.yaml
  • data/software/ujam-instruments-beatmaker-nemesis.yaml
  • data/software/ujam-instruments-beatmaker-cozy.yaml
  • data/software/ujam-instruments-beatmaker-idol.yaml

Walkthrough

The dataset audit cleanup updates duplicate detection, consolidates duplicate product records, adds discontinued categories across catalog entries, removes obsolete records, and refreshes UJAM and WA Production metadata.

Changes

Dataset audit cleanup

Layer / File(s) Summary
Duplicate detection and product consolidation
scripts/dataset-audit.ts, scripts/__tests__/dataset-audit.test.ts, data/hardware/taylor-t5z-pro.yaml, data/hardware/fostex-t50rpmk4g-plus.yaml, .changeset/*
Trailing + tokens are preserved during name normalization and covered by tests; Taylor T5z Pro variants are consolidated, and the Fostex plus model receives a canonical entry.
Discontinued catalog tagging
data/content/*, data/hardware/*, data/software/*
Catalog records receive discontinued category entries, with selected descriptions reformatted without substantive content changes.
Instrument catalog metadata refresh
data/software/ujam-*/..., data/software/wa-production-*/...
UJAM and WA Production records receive updated identifiers, categories, descriptions, specifications, pricing, videos, and URLs; obsolete duplicate records are removed.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the two main workstreams in the PR.
Linked Issues check ✅ Passed The PR addresses the audit cleanup and discontinued backlog goals with duplicate merges, + normalization, Taylor variants, Fostex rename, and tagging updates.
Out of Scope Changes check ✅ Passed The file edits shown are consistent with the stated audit cleanup and discontinued-tagging objectives.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch cleanup/dataset-audit-529

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the broken-urls PR contains broken or unreachable URLs label Jul 12, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

🟡 Minor comments (16)
data/hardware/taylor-t5z-pro.yaml-21-21 (1)

21-21: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Scope the finish claim to the applicable variants.

The details say the product is offered in “Shaded Edgeburst colorways,” but Tobacco Sunburst is listed as a separate variant. Taylor distinguishes Cayenne Red and Harbor Blue as shaded-edgeburst finishes, while Tobacco Sunburst is a separate finish. (woodandsteel.taylorguitars.com)

Use “a range of colorways” or scope the Shaded Edgeburst wording to the applicable variants.

Also applies to: 36-42

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/hardware/taylor-t5z-pro.yaml` at line 21, Update the product description
near the finish details to avoid implying that Tobacco Sunburst is a Shaded
Edgeburst finish; use the broader phrase “a range of colorways” or explicitly
limit “Shaded Edgeburst” to the Cayenne Red and Harbor Blue variants.

Source: Path instructions

data/hardware/jomox-xbase-999.yaml-9-12 (1)

9-12: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use the required flow scalar format for description.

This field uses >-, a folded block scalar. Repository guidelines require descriptions to use flow scalar formatting; reformat it as a wrapped plain scalar instead.

Proposed fix
-description: >-
-  A nine-voice analog drum synthesizer from 2006 combining four discrete analog
-  circuits with five sample-based voices, a 64-pattern step sequencer, and a
-  rugged metal enclosure.
+description: A nine-voice analog drum synthesizer from 2006 combining four discrete analog
+  circuits with five sample-based voices, a 64-pattern step sequencer, and a rugged metal
+  enclosure.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/hardware/jomox-xbase-999.yaml` around lines 9 - 12, Reformat the
description value in the YAML entry as a wrapped plain flow scalar, removing the
folded block scalar marker and preserving the existing description text.

Source: Coding guidelines

data/software/ujam-instruments-beatmaker-glory.yaml-39-40 (1)

39-40: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the OS compatibility wording.

macOS x 10.11 is not standard product naming. Use the vendor’s exact OS X 10.11 or macOS 10.11 wording.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-glory.yaml` around lines 39 - 40,
Update the macOS compatibility entry in the OS requirements list to use the
standard vendor naming “OS X 10.11” or “macOS 10.11”, removing the incorrect
“macOS x” wording.

Source: Path instructions

data/software/ujam-instruments-beatmaker-circuits.yaml-27-29 (1)

27-29: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the details copy.

“all once” should be “all at once.” The phrase “set the control negative” is also grammatically incomplete.

As per path instructions, user-facing catalog text should be reviewed for data quality.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-circuits.yaml` around lines 27 - 29,
Update the user-facing description near the catalog copy so “all once” reads
“all at once” and revise “set the control negative” to a grammatically complete
phrase while preserving the intended meaning.

Source: Path instructions

data/software/wa-production-bassshaper.yaml-37-40 (1)

37-40: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the brand and A/B wording.

Use BassShaper to match the product name and A/B comparison instead of ab comparison.

As per path instructions, user-facing catalog text should be reviewed for data quality.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/wa-production-bassshaper.yaml` around lines 37 - 40, Update the
user-facing catalog description for the Bassshaper entry to use the exact
product name “BassShaper” and replace “ab comparison” with “A/B comparison,”
preserving the rest of the description unchanged.

Source: Path instructions

data/software/ujam-instruments-beatmaker-cozy.yaml-29-32 (1)

29-32: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the nostalgia-control description.

“moving a one dial” should be “moving one dial” or “moving a single dial.”

As per path instructions, user-facing catalog text should be reviewed for data quality.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-cozy.yaml` around lines 29 - 32,
Update the nostalgia-control description text to replace the ungrammatical
phrase “moving a one dial” with “moving one dial” or “moving a single dial,”
preserving the rest of the user-facing catalog copy.

Source: Path instructions

data/software/ujam-instruments-beatmaker-glory.yaml-19-20 (1)

19-20: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the manufacturer name in the details text.

“ujams beatmaker series” should be “UJAM’s Beatmaker series.”

As per path instructions, user-facing catalog text should be reviewed for data quality.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-glory.yaml` around lines 19 - 20,
Update the user-facing details text near “Glory” to replace “ujams beatmaker
series” with the correctly styled “UJAM’s Beatmaker series,” preserving the rest
of the description unchanged.

Source: Path instructions

data/software/ujam-instruments-beatmaker-nemesis.yaml-8-9 (1)

8-9: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Proofread the NEMESIS marketing copy.

The description is missing punctuation in Charge ahead put on, and dj rusher is inconsistently capitalized. Restore polished source copy.

As per path instructions, this is user-facing catalog data and should be proofread.

Also applies to: 23-25

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-nemesis.yaml` around lines 8 - 9,
Proofread the NEMESIS catalog description: add the missing punctuation between
“Charge ahead” and “put on,” and consistently capitalize “DJ Rusher” in the
referenced marketing copy while preserving the intended wording.

Source: Path instructions

data/software/ujam-instruments-beatmaker-idol.yaml-42-43 (1)

42-43: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Remove the x typo from the macOS requirement.

macOS x 10.14 is not a valid OS label; use macOS 10.14 if this legacy requirement is intentionally retained.

As per path instructions, system-requirement text must be accurate.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-idol.yaml` around lines 42 - 43,
Update the macOS system requirement entry in the software requirements list by
removing the stray “x” between “macOS” and “10.14”, preserving the stated legacy
version requirement.

Source: Path instructions

data/software/ujam-instruments-beatmaker-kandy.yaml-21-28 (1)

21-28: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Proofread the rewritten KANDY copy.

ujams is missing an apostrophe, and make uhm actually leave an impression contains a corrupted word or phrase. Restore the intended source wording.

As per path instructions, this is user-facing catalog data and should be proofread.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-kandy.yaml` around lines 21 - 28,
Proofread the user-facing description in the Kandy catalog entry: correct
“ujams” to the possessive form and replace the corrupted “make uhm actually
leave an impression” wording with the intended source phrase, preserving the
surrounding marketing copy.

Source: Path instructions

data/software/ujam-instruments-beatmaker-hype.yaml-8-9 (1)

8-9: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Repair the corrupted marketing copy.

The text contains concatenations such as getnothing, lessmaking, dropso, perfectionall, loops"but, and delayperfect; the description is also incomplete. Restore the source wording before publishing.

As per path instructions, this is user-facing catalog data and should be proofread.

Also applies to: 17-21, 23-35

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-hype.yaml` around lines 8 - 9,
Correct the user-facing marketing copy in the YAML description, including the
lines covered by the comment, by restoring the original wording and separating
corrupted concatenated words such as “get nothing,” “less making,” “drops,”
“perfection,” “loops,” and “delay perfect.” Complete the description while
preserving valid YAML formatting and the intended product messaging.

Source: Path instructions

data/software/ujam-instruments-beatmaker-vice.yaml-14-18 (1)

14-18: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Normalize the brand names in the VICE copy.

linn and simmons should be capitalized as proper names: Linn and Simmons. (ujam.com)

As per path instructions, user-facing catalog text should be polished.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-vice.yaml` around lines 14 - 18,
Update the user-facing description for Beatmaker Vice to capitalize the brand
names “linn” and “simmons” as “Linn” and “Simmons,” while preserving the rest of
the catalog copy.

Sources: Path instructions, MCP tools

data/software/ujam-instruments-beatmaker-idol.yaml-8-9 (1)

8-9: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the malformed description and details text.

The description is a concatenation of fragments, and the details repeat awkward lowercase/copy artifacts such as korean and idol. This should be restored from the authoritative source copy.

As per path instructions, this is user-facing catalog data and should be proofread.

Also applies to: 11-13, 20-23

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-idol.yaml` around lines 8 - 9,
Restore the user-facing description and details fields in the catalog entry to
the authoritative source copy, replacing the concatenated fragments and awkward
repeated lowercase/copy artifacts such as “korean” and “idol.” Proofread all
affected text blocks, including the ranges around lines 11–13 and 20–23, while
preserving the YAML structure and intended catalog content.

Source: Path instructions

data/software/ujam-instruments-beatmaker-vice.yaml-26-30 (1)

26-30: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Replace the 1,000-pattern claim with 460 patterns.
Lines 26-30 and 57-58 still overstate the library; use the 460-pattern count instead.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-vice.yaml` around lines 26 - 30,
Update the UJAM Vice description to replace the overclaimed “over 1000 patterns”
wording with the accurate 460-pattern count, and apply the same correction to
the matching claim near the later pattern-count entry.

Sources: Path instructions, MCP tools

data/software/ujam-instruments-beatmaker-void.yaml-50-52 (1)

50-52: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Update VOID pricing. 119 USD doesn’t match UJAM’s public pricing; the product page shows a 49 USD promo and 69 USD regular price. Update the amount to match the catalog’s price convention, and add source/asOf metadata to the price entry.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-void.yaml` around lines 50 - 52,
Update the VOID price entry under prices to use the catalog’s 69 USD regular
price, and add source and asOf metadata consistent with the repository’s pricing
convention.

Sources: Path instructions, MCP tools

data/software/ujam-instruments-beatmaker-vice.yaml-68-70 (1)

68-70: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Update VICE pricing. 69 USD is out of sync with UJAM’s current 49 USD price. If this is meant to capture MSRP or a historical price, label it explicitly.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-vice.yaml` around lines 68 - 70,
Update the prices entry for the VICE product to use the current 49 USD amount
instead of 69 USD. If retaining 69 USD intentionally as MSRP or historical
pricing, label that purpose explicitly using the configuration’s established
pricing metadata.

Sources: Path instructions, MCP tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@data/software/ujam-instruments-beatmaker-hype.yaml`:
- Around line 48-54: Update the system-requirements block for the UJAM Beatmaker
HYPE record to match the current requirements: Windows 10/11, macOS 12–26, 8 GB
RAM, and 0.96 GB disk space, while retaining the other applicable requirements.
Apply the same update consistently to other Beatmaker records with this stale
block, or move the older values into an explicit legacy-version entry.

In `@data/software/ujam-instruments-beatmaker-nemesis.yaml`:
- Around line 40-44: Update the NEMESIS entry’s specs metadata to reflect the
current product data: replace the outdated 30 styles count with 20 styles and
include the 460 MIDI loops detail. Preserve the existing formatting and move the
older count to a version/history field only if such a field already exists.
- Around line 58-60: Update the Beatmaker NEMESIS price entry under prices from
129 USD to 49 USD, and add source referencing the official UJAM page plus asOf
recording the verification date. Preserve the existing currency and YAML
structure.

In `@data/software/ujam-instruments-beatmaker-void.yaml`:
- Around line 38-49: Update the VOID product specifications in the listed
feature section to use the official values: replace “40-50 presets” with “50
presets,” replace “Notch filter sweep” with “Vortex,” add “460 patterns,” and
update the price from $119 to the current approximately $49 USD price.

In `@scripts/dataset-audit.ts`:
- Around line 146-153: Update the normalization logic in the dataset audit
name-processing expression to replace only a plus sign at the end of the name,
while continuing to remove other non-alphanumeric characters. Preserve existing
trailing-plus behavior and add regression coverage for both trailing and
internal plus signs to ensure duplicate-name bucketing remains correct.

---

Minor comments:
In `@data/hardware/jomox-xbase-999.yaml`:
- Around line 9-12: Reformat the description value in the YAML entry as a
wrapped plain flow scalar, removing the folded block scalar marker and
preserving the existing description text.

In `@data/hardware/taylor-t5z-pro.yaml`:
- Line 21: Update the product description near the finish details to avoid
implying that Tobacco Sunburst is a Shaded Edgeburst finish; use the broader
phrase “a range of colorways” or explicitly limit “Shaded Edgeburst” to the
Cayenne Red and Harbor Blue variants.

In `@data/software/ujam-instruments-beatmaker-circuits.yaml`:
- Around line 27-29: Update the user-facing description near the catalog copy so
“all once” reads “all at once” and revise “set the control negative” to a
grammatically complete phrase while preserving the intended meaning.

In `@data/software/ujam-instruments-beatmaker-cozy.yaml`:
- Around line 29-32: Update the nostalgia-control description text to replace
the ungrammatical phrase “moving a one dial” with “moving one dial” or “moving a
single dial,” preserving the rest of the user-facing catalog copy.

In `@data/software/ujam-instruments-beatmaker-glory.yaml`:
- Around line 39-40: Update the macOS compatibility entry in the OS requirements
list to use the standard vendor naming “OS X 10.11” or “macOS 10.11”, removing
the incorrect “macOS x” wording.
- Around line 19-20: Update the user-facing details text near “Glory” to replace
“ujams beatmaker series” with the correctly styled “UJAM’s Beatmaker series,”
preserving the rest of the description unchanged.

In `@data/software/ujam-instruments-beatmaker-hype.yaml`:
- Around line 8-9: Correct the user-facing marketing copy in the YAML
description, including the lines covered by the comment, by restoring the
original wording and separating corrupted concatenated words such as “get
nothing,” “less making,” “drops,” “perfection,” “loops,” and “delay perfect.”
Complete the description while preserving valid YAML formatting and the intended
product messaging.

In `@data/software/ujam-instruments-beatmaker-idol.yaml`:
- Around line 42-43: Update the macOS system requirement entry in the software
requirements list by removing the stray “x” between “macOS” and “10.14”,
preserving the stated legacy version requirement.
- Around line 8-9: Restore the user-facing description and details fields in the
catalog entry to the authoritative source copy, replacing the concatenated
fragments and awkward repeated lowercase/copy artifacts such as “korean” and
“idol.” Proofread all affected text blocks, including the ranges around lines
11–13 and 20–23, while preserving the YAML structure and intended catalog
content.

In `@data/software/ujam-instruments-beatmaker-kandy.yaml`:
- Around line 21-28: Proofread the user-facing description in the Kandy catalog
entry: correct “ujams” to the possessive form and replace the corrupted “make
uhm actually leave an impression” wording with the intended source phrase,
preserving the surrounding marketing copy.

In `@data/software/ujam-instruments-beatmaker-nemesis.yaml`:
- Around line 8-9: Proofread the NEMESIS catalog description: add the missing
punctuation between “Charge ahead” and “put on,” and consistently capitalize “DJ
Rusher” in the referenced marketing copy while preserving the intended wording.

In `@data/software/ujam-instruments-beatmaker-vice.yaml`:
- Around line 14-18: Update the user-facing description for Beatmaker Vice to
capitalize the brand names “linn” and “simmons” as “Linn” and “Simmons,” while
preserving the rest of the catalog copy.
- Around line 26-30: Update the UJAM Vice description to replace the overclaimed
“over 1000 patterns” wording with the accurate 460-pattern count, and apply the
same correction to the matching claim near the later pattern-count entry.
- Around line 68-70: Update the prices entry for the VICE product to use the
current 49 USD amount instead of 69 USD. If retaining 69 USD intentionally as
MSRP or historical pricing, label that purpose explicitly using the
configuration’s established pricing metadata.

In `@data/software/ujam-instruments-beatmaker-void.yaml`:
- Around line 50-52: Update the VOID price entry under prices to use the
catalog’s 69 USD regular price, and add source and asOf metadata consistent with
the repository’s pricing convention.

In `@data/software/wa-production-bassshaper.yaml`:
- Around line 37-40: Update the user-facing catalog description for the
Bassshaper entry to use the exact product name “BassShaper” and replace “ab
comparison” with “A/B comparison,” preserving the rest of the description
unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 3723cec9-dcbe-4d40-86f5-3df5b8dc47b3

📥 Commits

Reviewing files that changed from the base of the PR and between 860c7be and 792f4af.

📒 Files selected for processing (81)
  • .changeset/dataset-audit-cleanup.md
  • data/content/drumforge-drumforge-djent-grooves-vol-1.yaml
  • data/hardware/a-designs-reddi.yaml
  • data/hardware/aguilar-tlc-bass-compressor.yaml
  • data/hardware/alm-busy-circuits-sbg.yaml
  • data/hardware/alm-busy-circuits-sid-guts.yaml
  • data/hardware/amphion-argon3ls.yaml
  • data/hardware/amphion-argon3s.yaml
  • data/hardware/amphion-one18.yaml
  • data/hardware/amphion-two18.yaml
  • data/hardware/audeze-el-8-closed-back.yaml
  • data/hardware/audeze-el-8-open-back.yaml
  • data/hardware/audeze-el-8-titanium.yaml
  • data/hardware/audeze-isine-10.yaml
  • data/hardware/audeze-isine-20.yaml
  • data/hardware/audeze-isine-lx.yaml
  • data/hardware/audeze-lcd-2-closed-back.yaml
  • data/hardware/audeze-lcd-4z.yaml
  • data/hardware/audeze-lcd-i3.yaml
  • data/hardware/audeze-lcd-i4.yaml
  • data/hardware/audeze-lcd-r.yaml
  • data/hardware/audeze-sine-dx.yaml
  • data/hardware/audeze-the-king-mkii.yaml
  • data/hardware/chase-bliss-billy-strings-wombtone.yaml
  • data/hardware/dbx-1086.yaml
  • data/hardware/dbx-140.yaml
  • data/hardware/dbx-3031.yaml
  • data/hardware/dbx-303c.yaml
  • data/hardware/dbx-3215.yaml
  • data/hardware/dbx-3231l.yaml
  • data/hardware/dbx-363x.yaml
  • data/hardware/dbx-563x.yaml
  • data/hardware/dbx-566.yaml
  • data/hardware/dbx-576.yaml
  • data/hardware/dbx-driverack-pa.yaml
  • data/hardware/dbx-quantum-ii.yaml
  • data/hardware/dbx-sc-64.yaml
  • data/hardware/dbx-sc-avb-card.yaml
  • data/hardware/dbx-usb-to-serial-cable.yaml
  • data/hardware/dw-drums-drktp04az-4-piece-performance-series-kit.yaml
  • data/hardware/dw-drums-drvd6514svdbk-satin-black-over-brass-snare-6-5x14.yaml
  • data/hardware/fostex-pm0-4c.yaml
  • data/hardware/fostex-t50rpmk4g-plus.yaml
  • data/hardware/jomox-xbase-999.yaml
  • data/hardware/lexicon-pcm96.yaml
  • data/hardware/midas-microphone-preamplifier-502.yaml
  • data/hardware/numark-axis4.yaml
  • data/hardware/taylor-t5z-pro-harbor-blue.yaml
  • data/hardware/taylor-t5z-pro-tobacco-sunburst.yaml
  • data/hardware/taylor-t5z-pro.yaml
  • data/software/airwindows-average-2.yaml
  • data/software/getgood-drums-p-iv-matt-halpern-signature-pack.yaml
  • data/software/gforce-imposcar.yaml
  • data/software/krotos-audio-concept-2.yaml
  • data/software/krotos-audio-krotos-studio.yaml
  • data/software/synchro-arts-vocal-production-bundle.yaml
  • data/software/ujam-beatmaker-circuits.yaml
  • data/software/ujam-beatmaker-cozy.yaml
  • data/software/ujam-beatmaker-gloom.yaml
  • data/software/ujam-beatmaker-glory.yaml
  • data/software/ujam-beatmaker-hype.yaml
  • data/software/ujam-beatmaker-idol.yaml
  • data/software/ujam-beatmaker-kandy.yaml
  • data/software/ujam-beatmaker-nemesis.yaml
  • data/software/ujam-beatmaker-vice.yaml
  • data/software/ujam-beatmaker-void.yaml
  • data/software/ujam-instruments-beatmaker-circuits.yaml
  • data/software/ujam-instruments-beatmaker-cozy.yaml
  • data/software/ujam-instruments-beatmaker-gloom.yaml
  • data/software/ujam-instruments-beatmaker-glory.yaml
  • data/software/ujam-instruments-beatmaker-hype.yaml
  • data/software/ujam-instruments-beatmaker-idol.yaml
  • data/software/ujam-instruments-beatmaker-kandy.yaml
  • data/software/ujam-instruments-beatmaker-nemesis.yaml
  • data/software/ujam-instruments-beatmaker-vice.yaml
  • data/software/ujam-instruments-beatmaker-void.yaml
  • data/software/w-a-production-babylon-2.yaml
  • data/software/w-a-production-bassshaper.yaml
  • data/software/wa-production-babylon-2.yaml
  • data/software/wa-production-bassshaper.yaml
  • scripts/dataset-audit.ts
💤 Files with no reviewable changes (17)
  • data/software/ujam-beatmaker-hype.yaml
  • data/software/ujam-beatmaker-idol.yaml
  • data/hardware/dw-drums-drvd6514svdbk-satin-black-over-brass-snare-6-5x14.yaml
  • data/software/w-a-production-babylon-2.yaml
  • data/software/airwindows-average-2.yaml
  • data/software/ujam-beatmaker-vice.yaml
  • data/hardware/dw-drums-drktp04az-4-piece-performance-series-kit.yaml
  • data/software/ujam-beatmaker-cozy.yaml
  • data/software/ujam-beatmaker-void.yaml
  • data/software/ujam-beatmaker-kandy.yaml
  • data/software/w-a-production-bassshaper.yaml
  • data/hardware/taylor-t5z-pro-tobacco-sunburst.yaml
  • data/hardware/taylor-t5z-pro-harbor-blue.yaml
  • data/software/ujam-beatmaker-glory.yaml
  • data/software/ujam-beatmaker-nemesis.yaml
  • data/software/ujam-beatmaker-gloom.yaml
  • data/software/ujam-beatmaker-circuits.yaml

Comment on lines +48 to +54
- 64-bit only
- 4 GB RAM minimum
- 0.16 GB disk space
- 1280x768px display minimum
- Internet connection required
- Windows 7 or later
- Os x 10.11 / macOS 10.12 or later

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== Target file ==\n'
git ls-files 'data/software/ujam-instruments-beatmaker-hype.yaml' && sed -n '1,220p' data/software/ujam-instruments-beatmaker-hype.yaml | cat -n

printf '\n== Similar UJAM Beatmaker records ==\n'
git ls-files 'data/software/*beatmaker*.yaml' | sort

printf '\n== Search for the same legacy requirements ==\n'
rg -n -C 2 'Windows 7|OS X 10\.11|macOS 10\.12|4 GB RAM|0\.16 GB disk space|0\.96 GB disk space|Windows 10–11|macOS 12–26|8 GB RAM' data/software

Repository: existential-engineering/catalog

Length of output: 50388


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== Target file (full with line numbers) ==\n'
sed -n '1,220p' data/software/ujam-instruments-beatmaker-hype.yaml | cat -n

printf '\n== Versions and specs in target/sibling files ==\n'
for f in \
  data/software/ujam-instruments-beatmaker-hype.yaml \
  data/software/ujam-instruments-beatmaker-nemesis.yaml \
  data/software/ujam-beatmaker-dope-2.yaml \
  data/software/ujam-beatmaker-hustle-2.yaml
do
  printf '\n--- %s ---\n' "$f"
  rg -n -C 2 '^(description:|specs:|versions:|- name:|releaseDate:|releaseDateYearOnly:|url:)' "$f"
done

Repository: existential-engineering/catalog

Length of output: 5134


🌐 Web query:

UJAM Beatmaker HYPE system requirements Windows 10 11 macOS 12 26 8 GB RAM 0.96 GB disk space

💡 Result:

The official system requirements for UJAM Beatmaker HYPE are as follows [1]: Operating Systems: Windows: Windows 10 or Windows 11 [1]. macOS: macOS Monterey (12) up to macOS Tahoe (26) [1]. Hardware Requirements: Memory: 8 GB of RAM [1]. Disk Space: 0.96 GB of free disk space [1]. These requirements align with the specifications provided by the manufacturer [1]. While some older third-party listings may cite lower specifications or broader OS compatibility ranges, the data provided above represents the current official requirements for the product [1]. Always ensure your system is 64-bit, as UJAM plug-ins are 64-bit only [2][3][4].

Citations:


Update these system requirements or move them into a legacy version. The current UJAM Beatmaker HYPE page lists Windows 10/11, macOS 12–26, 8 GB RAM, and 0.96 GB disk space; this file still shows the older Windows 7 / OS X 10.11 / macOS 10.12 / 4 GB / 0.16 GB requirements. Several Beatmaker records carry the same stale block, so refresh them consistently or model the older requirements in a version entry.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-hype.yaml` around lines 48 - 54,
Update the system-requirements block for the UJAM Beatmaker HYPE record to match
the current requirements: Windows 10/11, macOS 12–26, 8 GB RAM, and 0.96 GB disk
space, while retaining the other applicable requirements. Apply the same update
consistently to other Beatmaker records with this stale block, or move the older
values into an explicit legacy-version entry.

Sources: Path instructions, MCP tools

Comment on lines +40 to +44
specs: |-
- 60 plug-in presets
- 10 drum kits
- 30 styles
- 12 mix presets

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the target file and related nearby data/structure.
git ls-files data/software/ujam-instruments-beatmaker-nemesis.yaml
printf '\n--- file excerpt ---\n'
cat -n data/software/ujam-instruments-beatmaker-nemesis.yaml | sed -n '1,140p'

printf '\n--- similar UJAM entries ---\n'
rg -n "beatmaker.*nemesis|ujam" data/software -g '*.yaml' | sed -n '1,120p'

Repository: existential-engineering/catalog

Length of output: 14438


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Check schema/validation-related hints for this entry type and any version data.
python3 - <<'PY'
from pathlib import Path
p = Path('data/software/ujam-instruments-beatmaker-nemesis.yaml')
text = p.read_text()
for i, line in enumerate(text.splitlines(), 1):
    if any(k in line for k in ['specs:', 'description:', 'details:', 'prices:', 'versions:', 'url:', 'links:']):
        print(f"{i}: {line}")
PY

Repository: existential-engineering/catalog

Length of output: 332


🌐 Web query:

UJAM Beatmaker NEMESIS 20 styles 460 MIDI loops site:ujam.com/beatmaker/nemesis

💡 Result:

UJAM Beatmaker NEMESIS is a virtual instrument plug-in designed for creating high-energy, dark, and gritty beats suitable for genres such as cyberpunk, industrial, and dystopian trap [1]. Its core library features 20 distinct styles and 460 MIDI loops [1]. Additionally, the plug-in includes 10 drum kits, a "Hypercharge" special control for sound shaping, and supports MIDI drag-and-drop functionality with a resizable user interface [1].

Citations:


🌐 Web query:

UJAM Beatmaker NEMESIS "30 styles" "20 styles" "460 MIDI loops"

💡 Result:

UJAM Beatmaker NEMESIS is a virtual drum machine designed for cyberpunk and futuristic music production [1][2]. Official product specifications and consistent retail data confirm that it includes 20 styles and 460 MIDI loops [3][2][4]. While some secondary retailers have occasionally listed the product with 30 styles [5][6], the manufacturer and primary technical specifications state there are 20 styles, which comprise the 460 MIDI patterns [2][7][6]. The plugin also features 10 interchangeable drum kits [8][3].

Citations:


Reconcile NEMESIS’s styles count with the current product data.

The specs list 30 styles, but the product page shows 20 styles and 460 MIDI loops. Update this entry to match the current metadata, or move the older count into a version/history entry if that’s meant to be preserved.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-nemesis.yaml` around lines 40 - 44,
Update the NEMESIS entry’s specs metadata to reflect the current product data:
replace the outdated 30 styles count with 20 styles and include the 460 MIDI
loops detail. Preserve the existing formatting and move the older count to a
version/history field only if such a field already exists.

Sources: Path instructions, MCP tools

Comment on lines +58 to +60
prices:
- amount: 129
currency: USD

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== target file ==\n'
git ls-files 'data/software/ujam-instruments-beatmaker-nemesis.yaml'
wc -l data/software/ujam-instruments-beatmaker-nemesis.yaml
sed -n '1,140p' data/software/ujam-instruments-beatmaker-nemesis.yaml

printf '\n== price-related schema/docs/search ==\n'
rg -n --no-heading -S 'prices:|amount:|currency:|MSRP|list price|sale price|current price|price field' data schema CLAUDE.md README.md

printf '\n== nearby software examples with prices ==\n'
rg -n --no-heading -S '^prices:|^\s*- amount:|^\s*currency:' data/software | head -n 80

Repository: existential-engineering/catalog

Length of output: 50388


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== target entry =='
sed -n '1,140p' data/software/ujam-instruments-beatmaker-nemesis.yaml

echo
echo '== other UJAM software entries with prices =='
rg -n -A4 -B2 'ujam|prices:' data/software | sed -n '1,220p'

echo
echo '== price field patterns in software entries =='
python3 - <<'PY'
from pathlib import Path
import re
for path in sorted(Path("data/software").glob("*.yaml")):
    text = path.read_text(encoding="utf-8")
    if "prices:" in text:
        m = re.search(r"prices:\n(?:\s*-\s*amount:\s*[^\n]+\n\s*currency:\s*[^\n]+\n?)+", text)
        if m:
            block = m.group(0).strip().replace("\n", " | ")
            print(f"{path}: {block}")
PY

Repository: existential-engineering/catalog

Length of output: 50388


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== target entry =='
sed -n '1,120p' data/software/ujam-instruments-beatmaker-nemesis.yaml

echo
echo '== all UJAM software files =='
fd -a -t f '^ujam.*\.yaml$' data/software

echo
echo '== UJAM entries with prices =='
python3 - <<'PY'
from pathlib import Path
import yaml

for path in sorted(Path("data/software").glob("ujam*.yaml")):
    data = yaml.safe_load(path.read_text(encoding="utf-8"))
    prices = data.get("prices")
    if prices:
        print(path)
        print(prices)
PY

Repository: existential-engineering/catalog

Length of output: 15297


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== price schema definitions =='
rg -n -S 'prices|amount|currency|source|url|verification' schema data | sed -n '1,220p'

echo
echo '== candidate schemas for software entries =='
fd -a -t f 'software*.yaml|*.schema.yaml|*.json' schema data | sed -n '1,200p'

echo
echo '== UJAM entries with price blocks and any related metadata fields =='
python3 - <<'PY'
from pathlib import Path
import yaml

for path in sorted(Path("data/software").glob("ujam*.yaml")):
    data = yaml.safe_load(path.read_text(encoding="utf-8"))
    if "prices" in data:
        print(path)
        print("keys:", list(data.keys()))
        print("prices:", data["prices"])
        extra = [k for k in data.keys() if "price" in k.lower() or "source" in k.lower() or "verif" in k.lower()]
        if extra:
            print("extra price/source-like keys:", extra)
        print()
PY

Repository: existential-engineering/catalog

Length of output: 16238


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== software price schema excerpt =='
sed -n '1918,2115p' schema/json/software.json

echo
echo '== examples with price metadata =='
python3 - <<'PY'
from pathlib import Path
import yaml

count = 0
for path in sorted(Path("data/software").glob("*.yaml")):
    data = yaml.safe_load(path.read_text(encoding="utf-8"))
    for price in data.get("prices", []) or []:
        if any(k in price for k in ("source", "url")):
            print(path)
            print(price)
            print()
            count += 1
            if count >= 10:
                raise SystemExit
PY

Repository: existential-engineering/catalog

Length of output: 5697


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '== prices entries with source/asOf in software =='
python3 - <<'PY'
from pathlib import Path
import yaml

found = 0
for path in sorted(Path("data/software").glob("*.yaml")):
    data = yaml.safe_load(path.read_text(encoding="utf-8"))
    for price in data.get("prices", []) or []:
        if "source" in price or "asOf" in price:
            print(path)
            print(price)
            print()
            found += 1
if not found:
    print("NONE")
PY

Repository: existential-engineering/catalog

Length of output: 224


Update the Beatmaker NEMESIS price. 129 USD is stale; the official UJAM page shows $49. Change the amount to the current price and add source and asOf on the price entry.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-nemesis.yaml` around lines 58 - 60,
Update the Beatmaker NEMESIS price entry under prices from 129 USD to 49 USD,
and add source referencing the official UJAM page plus asOf recording the
verification date. Preserve the existing currency and YAML structure.

Sources: Path instructions, MCP tools

Comment on lines +38 to +49
- 10 kits
- 12 mix presets
- 20 styles
- 40-50 presets
- Notch filter sweep
- Compression
- Saturation
- Ambience
- DAW tempo sync
- Individual drum hit triggering
- Breakbeat creation
- Dnb (drum and bass) production

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== data/software/ujam-instruments-beatmaker-void.yaml =="
cat -n data/software/ujam-instruments-beatmaker-void.yaml | sed -n '1,140p'

echo
echo "== nearby similar files/search =="
rg -n "Beatmaker Void|Vortex|40-50 presets|50 presets|10 kits|20 styles|460 patterns|Notch filter sweep|price" data/software data -g '*.yaml' -g '*.yml' | sed -n '1,200p'

Repository: existential-engineering/catalog

Length of output: 16210


🌐 Web query:

UJAM Beatmaker VOID official specs 50 presets Vortex price

💡 Result:

UJAM Beatmaker VOID is a virtual drum instrument designed for drum and bass production [1][2]. Its official specifications include: - Presets and Styles: It features 50 presets and 20 performance styles [1][3][4]. - Patterns: It includes 460 patterns, categorized into intro, verse, chorus, fill, and ending sections [1][5][4]. - Kits and Mixes: It comes with 10 drum kits and 12 mix presets [1][6][4]. - Vortex Function: The Vortex is a proprietary feature that combines a notch filter sweep with pumping compression, designed to create cinematic risers and drops using a single dial [1][7][2]. As of July 2026, UJAM Beatmaker VOID is typically priced at $49.00 USD at major retailers like Plugin Boutique [6], though prices can fluctuate based on promotions and bundles.

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== UJAM software entries with prices =="
rg -n "^name: Beatmaker|^name: .*UJAM|^prices:|currency: USD|amount:" data/software/ujam-*.yaml data/software/*ujam*.yaml data/software/*.yaml | sed -n '1,220p'

Repository: existential-engineering/catalog

Length of output: 13094


🏁 Script executed:

#!/bin/bash
set -euo pipefail

for f in \
  data/software/ujam-instruments-finisher-micro.yaml \
  data/software/ujam-instruments-finisher-voodoo.yaml \
  data/software/ujam-instruments-virtual-bassist-rowdy-2.yaml \
  data/software/ujam-instruments-beatmaker-void.yaml
do
  echo "== $f =="
  cat -n "$f" | sed -n '1,120p'
  echo
done

Repository: existential-engineering/catalog

Length of output: 5549


Use the official VOID specs and current price. 40-50 presets should be 50 presets, the control should be Vortex (UJAM’s notch-filter/compression macro), and 460 patterns is missing. The $119 price looks stale; current UJAM/retail pricing is about $49 USD.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@data/software/ujam-instruments-beatmaker-void.yaml` around lines 38 - 49,
Update the VOID product specifications in the listed feature section to use the
official values: replace “40-50 presets” with “50 presets,” replace “Notch
filter sweep” with “Vortex,” add “460 patterns,” and update the price from $119
to the current approximately $49 USD price.

Sources: Path instructions, MCP tools

Comment thread scripts/dataset-audit.ts
Comment on lines +146 to +153
return (
name
.toLowerCase()
// A trailing "+" marks a distinct SKU (ProFX10v3 vs ProFX10v3+, Prime 4
// vs Prime 4+), so preserve it as a "plus" token instead of stripping it.
.replace(/\+/g, "plus")
.replace(/[^a-z0-9]+/g, "")
);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Only preserve a trailing +.

The implementation replaces every plus sign, although the documented behavior is limited to trailing SKU suffixes. Internal plus signs can therefore alter duplicate-name bucketing and cause findings to be missed or changed unexpectedly.

Suggested fix
-      .replace(/\+/g, "plus")
+      .replace(/\+\s*$/, "plus")

Add regression coverage for both trailing and internal plus signs.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
return (
name
.toLowerCase()
// A trailing "+" marks a distinct SKU (ProFX10v3 vs ProFX10v3+, Prime 4
// vs Prime 4+), so preserve it as a "plus" token instead of stripping it.
.replace(/\+/g, "plus")
.replace(/[^a-z0-9]+/g, "")
);
return (
name
.toLowerCase()
// A trailing "+" marks a distinct SKU (ProFX10v3 vs ProFX10v3+, Prime 4
// vs Prime 4+), so preserve it as a "plus" token instead of stripping it.
.replace(/\+\s*$/, "plus")
.replace(/[^a-z0-9]+/g, "")
);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/dataset-audit.ts` around lines 146 - 153, Update the normalization
logic in the dataset audit name-processing expression to replace only a plus
sign at the end of the name, while continuing to remove other non-alphanumeric
characters. Preserve existing trailing-plus behavior and add regression coverage
for both trailing and internal plus signs to ensure duplicate-name bucketing
remains correct.

- Fix verified typos in merged uJAM/WA entries: proper nouns (Linn, Simmons,
  DJ Rusher, UJAM's), OS naming (OS X / macOS), HYPE's corrupted concatenations,
  and BassShaper / A/B comparison.
- Correct Taylor T5z Pro copy (Tobacco Sunburst is not a Shaded Edgeburst).
- Reflow jomox Xbase 999 description as a plain flow scalar.
- Export normalizeName + add regression tests. Kept the global "+"->"plus"
  replacement: a trailing-only rule regressed Vision+ Console and
  SPS-1UW+ MKII (internal "+"), which must stay distinct from their base models.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jeffreylouden jeffreylouden merged commit 744529d into main Jul 12, 2026
9 of 10 checks passed
@jeffreylouden jeffreylouden deleted the cleanup/dataset-audit-529 branch July 12, 2026 01:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

broken-urls PR contains broken or unreachable URLs content hardware Changes to hardware catalog entries scripts Changes to build/validation scripts software Changes to software catalog entries

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🔎 Dataset Audit 🗂 Discontinued Tagging Backlog

1 participant